package interfazGrafica;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Color;
import javax.swing.UIManager;
import java.awt.SystemColor;
import javax.swing.SwingConstants;

import negocios.Minibook;
import javax.swing.JList;

import datos.BackUp;
import javax.swing.JScrollPane;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Principal {

	public static JFrame frmMinibook;
	public static Integer cantidadUsuarios;
	private static Minibook book;
	private static JLabel lblNumeroUsuarios;
	private static JList lstUsuarios;
	private static JList lstUsuariosConMasAmigos;
	private static JList lstUsuarioConMenosAmigos;
	private static String email;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@SuppressWarnings("static-access")
			public void run() {
				try {
					Principal window = new Principal();
					window.frmMinibook.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Principal() {
		try{
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		}
		catch (Exception e){
			System.out.println("Error setting native LAF: "+e);
		}
		book= Minibook.inicializarMinibook();
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frmMinibook = new JFrame();
		frmMinibook.setResizable(false);
		frmMinibook.getContentPane().setBackground(Color.WHITE);
		frmMinibook.setBackground(SystemColor.window);
		frmMinibook.setTitle("Minibook");
		frmMinibook.setBounds(100, 100, 1024, 630);
		frmMinibook.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frmMinibook.getContentPane().setLayout(null);
		
		cantidadUsuarios = book.getCantidadUsuarios();
		
		JButton btnEliminarUsuario = new JButton("Eliminar Usuario");
		btnEliminarUsuario.setForeground(Color.BLUE);
		btnEliminarUsuario.setBackground(UIManager.getColor("Button.background"));
		btnEliminarUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				EliminarUsuario nuevo= new EliminarUsuario();
				nuevo.setVisible(true);
				nuevo.setLocationRelativeTo(frmMinibook);
			}
		});
		btnEliminarUsuario.setBounds(587, 492, 287, 25);
		frmMinibook.getContentPane().add(btnEliminarUsuario);
		
		JLabel lblCantUsuarios = new JLabel("Cantidad Usuarios");
		lblCantUsuarios.setBounds(444, 62, 136, 15);
		frmMinibook.getContentPane().add(lblCantUsuarios);
		
		JLabel lblUsuarioConMasAmigos = new JLabel("Usuarios Con Mas Amigos:");
		lblUsuarioConMasAmigos.setBounds(93, 85, 197, 15);
		frmMinibook.getContentPane().add(lblUsuarioConMasAmigos);
		
		JButton btnSalir = new JButton("Salir");
		btnSalir.setForeground(Color.BLUE);
		btnSalir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				// serializa antes de salir
				BackUp.persistenciaGuardar(book);
				System.exit(0);
			}
		});
		btnSalir.setBackground(UIManager.getColor("Button.background"));
		btnSalir.setBounds(389, 566, 287, 25);
		frmMinibook.getContentPane().add(btnSalir);
		JLabel lblAdministracion = new JLabel("Administracion Mini-Book");
		lblAdministracion.setForeground(Color.BLUE);
		lblAdministracion.setFont(new Font("Dialog", Font.BOLD, 24));
		lblAdministracion.setBounds(333, 12, 343, 25);
		frmMinibook.getContentPane().add(lblAdministracion);
		
		JButton btnAgregarUsuario = new JButton("Agregar Usuario");
		btnAgregarUsuario.setBackground(UIManager.getColor("Button.background"));
		btnAgregarUsuario.setForeground(Color.BLUE);
		btnAgregarUsuario.setFont(new Font("Dialog", Font.BOLD, 12));
		btnAgregarUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				RegistroNuevo registro= new RegistroNuevo();
				registro.setVisible(true);
				registro.setLocationRelativeTo(frmMinibook);
				//frmMinibook.setVisible(false);
				
			}
		});
		btnAgregarUsuario.setBounds(205, 492, 287, 25);
		frmMinibook.getContentPane().add(btnAgregarUsuario);
		
		JLabel lblUsuariosConMenos = new JLabel("Usuarios Con Menos Amigos:");
		lblUsuariosConMenos.setBounds(720, 85, 205, 15);
		frmMinibook.getContentPane().add(lblUsuariosConMenos);
		
		JButton btnEliminarAmistad = new JButton("Eliminar Amistad");
		btnEliminarAmistad.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				EliminarAmistad ventana= new EliminarAmistad();
				ventana.setVisible(true);
				ventana.setLocationRelativeTo(frmMinibook);
				//frmMinibook.setVisible(false);
				
			}
		});
		btnEliminarAmistad.setForeground(Color.BLUE);
		btnEliminarAmistad.setBackground(UIManager.getColor("Button.background"));
		btnEliminarAmistad.setBounds(587, 529, 287, 25);
		frmMinibook.getContentPane().add(btnEliminarAmistad);
		
		JButton btnAgregarAmistad = new JButton("Agregar Amistad");
		btnAgregarAmistad.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				AgregarAmistad ventana= new AgregarAmistad();
				ventana.setVisible(true);
				ventana.setLocationRelativeTo(frmMinibook);
				//frmMinibook.setVisible(false);
				
			}
		});
		btnAgregarAmistad.setForeground(Color.BLUE);
		btnAgregarAmistad.setBackground(UIManager.getColor("Button.background"));
		btnAgregarAmistad.setBounds(205, 529, 287, 25);
		frmMinibook.getContentPane().add(btnAgregarAmistad);
		
		lblNumeroUsuarios = new JLabel("");
		lblNumeroUsuarios.setFont(new Font("Dialog", Font.BOLD, 20));
		lblNumeroUsuarios.setHorizontalAlignment(SwingConstants.CENTER);
		lblNumeroUsuarios.setText(cantidadUsuarios.toString());
		lblNumeroUsuarios.setForeground(Color.RED);
		lblNumeroUsuarios.setBounds(473, 78, 70, 25);
		frmMinibook.getContentPane().add(lblNumeroUsuarios);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(682, 112, 280, 334);
		frmMinibook.getContentPane().add(scrollPane);
		
		lstUsuarioConMenosAmigos = new JList();
		scrollPane.setViewportView(lstUsuarioConMenosAmigos);
		
		JScrollPane scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(51, 112, 280, 334);
		frmMinibook.getContentPane().add(scrollPane_2);
		
		lstUsuariosConMasAmigos = new JList();
		scrollPane_2.setViewportView(lstUsuariosConMasAmigos);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(367, 112, 280, 334);
		frmMinibook.getContentPane().add(scrollPane_1);
		
		lstUsuarios = new JList();
		lstUsuarios.setToolTipText("Al hacer click sobre el usuario mustra sus amigos");
		lstUsuarios.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				
				if(book.getUsuarios().size()!= 0){
				
				setEmail((String) lstUsuarios.getSelectedValue());
				
				UsuariosDe ventana = new UsuariosDe();
				
				ventana.setVisible(true);
				
				UsuariosDe.setUsuario(getEmail());
				
				//frmMinibook.setVisible(false);
				}
			}
		});
		scrollPane_1.setViewportView(lstUsuarios);
		
		cargarDatos();
		refresh();
	}
	
	public static void hacerVisible(boolean condicion){
		Principal.getFrmMinibook().setVisible(condicion);

	}

	public static String getEmail() {
		return email;
	}

	public static void setEmail(String email) {
		Principal.email = email;
	}

	public static JFrame getFrmMinibook() {
		return frmMinibook;
	}

	public static Minibook getMinibook (){
		return book;
	}
	
	
	public static void setCantidadUsuarios(){
		cantidadUsuarios= book.getCantidadUsuarios();
		lblNumeroUsuarios.setText(cantidadUsuarios.toString());
	}
	
	public static void cargarListas(){
		if (book.getUsuarios().size()!=0){

			DefaultListModel listModel = new DefaultListModel();
			for(int i=0; i < book.getUsuarios().size(); i++) {
				listModel.add(i, book.getUsuarios().get(i).getEmail());
			}
			lstUsuarios.setModel(listModel);

			DefaultListModel listModel1 = new DefaultListModel();
			for(int i=0; i <  book.usuariosMasPopulares().size(); i++) {
				listModel1.add(i, book.usuariosMasPopulares().get(i).getNombre()+ " - AMIGOS: "+ book.usuariosMasPopulares().get(i).getCantidadAmigos());
			}
			lstUsuariosConMasAmigos.setModel(listModel1);

			DefaultListModel listModel2 = new DefaultListModel();
			for(int i=0; i <  book.usuariosMenosPopulares().size(); i++) {
				listModel2.add(i, book.usuariosMenosPopulares().get(i).getNombre()+ " - AMIGOS: "+ book.usuariosMenosPopulares().get(i).getCantidadAmigos());
			}
			lstUsuarioConMenosAmigos.setModel(listModel2);
		}

	}

	public static void cargarDatos(){
		
		if (BackUp.persistenciaRecuperar() == null){
			BackUp.persistenciaGuardar(book);
		}else{
			book = BackUp.persistenciaRecuperar();
		}
	}
	
	public static void refresh(){
		
		setCantidadUsuarios();
		cargarListas();
	}
}
